package com.itheima.aop;
// 记录操作日志，进行权限控制，事务管理底层就是用Aop进行实现的
//优势：代码无侵入   减少重复代码  提高开发效率   维护方便m
//动态代理       在对一个目标对象进行/disadvantage：性能问题  切面过多会影响性能  切面过多会影响开发效率会产生一个代理对象，最后动态 依赖注入后的数据是代理对象。
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

@Slf4j
@Component
@Aspect//切面类
public class MyAspect1 {


    @Pointcut("execution(* com.itheima.service.impl.DeptServiceImpl.*(..))")
    public void pointCut() {

    }



    @Before("pointCut()")
    public void before() {
        log.info("before.....");
    }

    //环绕式，目标方法前后都有要执行的代码
    @Around("pointCut()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {

        log.info("after......1");
        Object Object = joinPoint.proceed();
        return Object;
    }

    @After("pointCut()")
    public void after() {
        log.info("after....");

    }

    //原始方法正常运行正常返回才会执行
    @AfterReturning("pointCut()")
    public void afterReturning() {
           log.info("afterReturning.....");
    }

    //原始方法正常运行正常返回才会执行，出现异常才会执行
    @AfterThrowing("pointCut()")
    public void afterThrowing() {
        log.info("afterThrowing.......");

    }
}
